package com.sqx.modules.health.utils;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ExcelImportUtil {

    public static List<List<String>> importExcel(MultipartFile file){
        List<List<String>> result = new ArrayList<>();
        try {
            // 获取上传的文件名
            String fileName = file.getOriginalFilename();
            // 获取上传文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
            if (!"xlsx".equals(suffix) && !"xls".equals(suffix)) {
                return null;
            }
            // 输入流读取文件
            InputStream inputStream = file.getInputStream();
            // 1. 新建工作簿
            Workbook workbook = null;

            if(suffix.equals("xlsx")){
                // Excel2007版本及以后 用XSSF(即Poi-ooxml)处理
                workbook = new XSSFWorkbook(inputStream);
            } else {
                // Excel2003版本 用HSSF(即Poi)处理
                workbook = new HSSFWorkbook(inputStream);
            }
            // 2. 获取当前工作表
            Sheet sheet = workbook.getSheetAt(0);

            if (sheet != null) {
                // 从第二行开始遍历工作表的每一行
                for (int i = 1; i <= sheet.getLastRowNum(); i++){
                    // 获取当前行数据
                    Row row = sheet.getRow(i);
                    if (row != null) {
                        // 遍历每一个单元格
                        List<String> list = new ArrayList<>();
                        for (Cell cell : row) {
                            // 将单元格数据类型转化为字符串类型
                            cell.setCellType(CellType.STRING);
                            //cell.setCellType(Cell.CELL_TYPE_STRING);
                            // 获取字符串类型的值
                            String cellValue = cell.getStringCellValue();
                            // 将获取到的值添加到集合中
                            list.add(cellValue);
                        }
                        result.add(list);
                    }
                }
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
}
